隨著時代的進步,人們對單一頁面的要求日漸複雜化,從過去的靜態頁面,到後來需要包括伺服器回應和快取的資料,以及本機建立而尚未回傳到伺服器等資料,為了完成這些需求,需要一個更複雜的State去管理,而Redux便是為了解決此問題出現的工具,它藉由強加某些限制在更新發生的方式和時機上,讓 state的變化更有可預測性。
console.log(store.getState())
/* Prints
{
visibilityFilter: 'SHOW_ALL',
todos: [
{
text: 'Consider using Redux',
completed: true,
},
{
text: 'Keep all state in a single tree',
completed: false
}
]
}
*/
2.State 是唯讀的
唯一一個改變state的方式是發出一個action,action為一個描述發生什麼事的物件。集中管理並儲存所有發生變化的action,之後debug或測試時可以用。
store.dispatch({
type: 'COMPLETE_TODO',
index: 1
})
store.dispatch({
type: 'SET_VISIBILITY_FILTER',
filter: 'SHOW_COMPLETED'
})
3.變更被寫成 pure function
若要指定store用哪個action來改變的話,必須寫 pure reducer。reducer是一個pure function,它會先取得先前的 state 和一個action,並回傳下一個state。